﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Crosland.Automotriz.Core;
using System.Globalization;

namespace Crosland.Automotriz.Data.Dao.Linq
{
    public class clsT_Mae_Tipo_CambioDAO
    {
        private AutomotrizEntities ContextoDeObjs = new AutomotrizEntities();
        public bool Insertar(T_MAE_TIPO_CAMBIO Obj)
        {
            try
            {
                ContextoDeObjs.AddObject("T_MAE_TIPO_CAMBIO", Obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception e)
            {
                throw new Exception("Error al guardar en base de datos .", e);
            }
            return true;
        }

        //public int Modificar(int ID_MAE_TIPO_CAMBIO,int ID_MONEDA,int ID_MONEDA_REF,DateTime FEC_CAMBIO,decimal IMP_VENTA,decimal IMP_COMPRA) {

        //    try
        //    {
        //        var q = (from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO
        //                 where c.ID_MAE_TIPO_CAMBIO == ID_MAE_TIPO_CAMBIO
        //                 select c).FirstOrDefault();

        //        q.ID_MONEDA = ID_MONEDA;
        //        q.ID_MONEDA_REF = ID_MONEDA_REF;
        //        q.FEC_CAMBIO = FEC_CAMBIO;
        //        q.IMP_VENTA = IMP_VENTA;
        //        q.IMP_COMPRA = IMP_COMPRA;
        //        ContextoDeObjs.SaveChanges();


        //    }
        //    catch (Exception)
        //    {

        //        return 0;
        //    }
        //    return 1;
        
        //}




        public bool Modificar(T_MAE_TIPO_CAMBIO obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_MAE_TIPO_CAMBIO", obj);
                ContextoDeObjs.ObjectStateManager.ChangeObjectState(obj, System.Data.EntityState.Modified);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception e)
            {
                throw new Exception("Error al actualizar en base de datos .", e);

            }
            return true;
        }



   
        public bool Eliminar(T_MAE_TIPO_CAMBIO obj)
        {
            try
            {
                ContextoDeObjs.AttachTo("T_MAE_TIPO_CAMBIO", obj);
                ContextoDeObjs.DeleteObject(obj);
                ContextoDeObjs.SaveChanges();
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }


        public IEnumerable<Object> lista(int nro_mes,int num_anio)
        {
            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO
                        from t in ContextoDeObjs.TD_MONEDA
                        where t.ID_MONEDA == c.ID_MONEDA
                        && c.FEC_CAMBIO.Value.Month==nro_mes && c.FEC_CAMBIO.Value.Year==num_anio
                        select new
                        {
                            c.FEC_CAMBIO,
                            c.ID_MONEDA,
                            c.ID_MONEDA_REF,
                            c.IMP_COMPRA,
                            c.IMP_VENTA,
                            t.DES_MONEDA,
                            t.DES_ABREV_MONEDA,
                           c.ID_MAE_TIPO_CAMBIO
                        };

                list = q.OrderByDescending(x=>x.FEC_CAMBIO).ToList();

            }
            catch (Exception)
            {
                return null;
            }
            return list;

        }

        public IEnumerable<Object> listaMeses()
        {
            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO
                        select new
                        {
                            nro_mes = c.FEC_CAMBIO.Value.Month==1?1:
                                      c.FEC_CAMBIO.Value.Month == 2 ?2:
                                      c.FEC_CAMBIO.Value.Month == 3 ?3:
                                      c.FEC_CAMBIO.Value.Month == 4 ?4 :
                                      c.FEC_CAMBIO.Value.Month == 5 ? 5 :
                                      c.FEC_CAMBIO.Value.Month == 6 ? 6 :
                                      c.FEC_CAMBIO.Value.Month == 7 ? 7:
                                      c.FEC_CAMBIO.Value.Month == 8 ? 8 :
                                      c.FEC_CAMBIO.Value.Month == 9 ?9 :
                                      c.FEC_CAMBIO.Value.Month == 10 ?10 :
                                      c.FEC_CAMBIO.Value.Month == 11 ?11 :
                                      c.FEC_CAMBIO.Value.Month == 12 ? 12 : 
                                      c.FEC_CAMBIO.Value.Month==0?0:0,
                            des_mes = c.FEC_CAMBIO.Value.Month == 1 ? "Enero" :
                                      c.FEC_CAMBIO.Value.Month == 2 ? "Febrero" :
                                      c.FEC_CAMBIO.Value.Month == 3 ? "Marzo" :
                                      c.FEC_CAMBIO.Value.Month == 4 ? "Abril" :
                                      c.FEC_CAMBIO.Value.Month == 5 ? "Mayo" :
                                      c.FEC_CAMBIO.Value.Month == 6 ? "Junio" :
                                      c.FEC_CAMBIO.Value.Month == 7 ? "Julio" :
                                      c.FEC_CAMBIO.Value.Month == 8 ? "Agosto" :
                                      c.FEC_CAMBIO.Value.Month == 9 ? "Septiembre" :
                                      c.FEC_CAMBIO.Value.Month == 10 ? "Octubre" :
                                      c.FEC_CAMBIO.Value.Month == 11 ? "Noviembre" :
                                      c.FEC_CAMBIO.Value.Month == 12 ? "Diciembre" : 
                                      c.FEC_CAMBIO.Value.Month==0?"Null":"_"

                        };

                list = q.OrderByDescending(x=>x.nro_mes).ToList().Distinct();
            }
            catch (Exception)
            {

                return null;
            }
            return list;

        }

        public IEnumerable<Object> listaAnio()
        {
            IEnumerable<Object> list = new List<Object>();
            try
            {
                var q = from c in ContextoDeObjs.T_MAE_TIPO_CAMBIO
                        select new
                        {
                           num_anio=c.FEC_CAMBIO.Value.Year

                        };

                list = q.ToList().Distinct();
            }
            catch (Exception)
            {

                return null;
            }
            return list;

        }


        private string obtenerNombreMesNumero(int numeroMes)
        {
            try
            {
                DateTimeFormatInfo formatoFecha = CultureInfo.CurrentCulture.DateTimeFormat;
                string nombreMes = formatoFecha.GetMonthName(numeroMes);
                return nombreMes;
            }
            catch
            {
                return "Desconocido";
            }
        }




    }
}
